package provider

import (
	"context"

	"gitee.com/go-course/go11/devcloud-mini/cmdb/apps/resource"
)

// 多厂商接口的封装, 抹平多个厂商接口的差异, 便于上层使用该接口来进行业务
// tencent: QueryHost(ctx, in) (resourceSet, error)
// huawei: QueryHost(ctx, in) (resourceSet, error)
// aliyun: QueryHost(ctx, in) (resourceSet, error)
// Provider().QueryHost()

// http.Handler
type HostHandler func(*resource.Resource)

// 客户端封装
type HostProvider interface {
	// 获取Host 主机接口, 数据是分页批量拉取, 我们的接口是 单独一个一个创建资源的
	// resp = QueryHost()
	// for resp { CreateResource(item) }
	// 拉取一页数据: 10s, 一个一个往数据库里面写, 这接口是最基本的接口设计,自己厂商
	// QueryHost(context.Context, *QueryHostRequest) (*resource.ResourceSet, error)
	// 类比 Js ForEatch, 给一个回调函数
	// QueryHost() {for resources; fn(item)}
	// 通过回调把接口返回出去, Stream
	QueryHost(context.Context, *QueryHostRequest, HostHandler) error
}

func NewQueryHostRequest() *QueryHostRequest {
	return &QueryHostRequest{}
}

type QueryHostRequest struct {
}
